//044. 五边形数
//        五边形数可以由公式生成：Pn=n(3n−1)/2，前十个五边形数如下：
//        1, 5, 12, 22, 35, 51, 70, 92, 117, 145,...
//        可以看出 P4+P7=22+70=92=P8。然而，这两个数的差 70−22=48 并不是五边形数。
//        假设有一对五边形数 Pj 和 Pk，这两个数的和和差的绝对值都是五边形数，假设 D=|Pk−Pj|，
//        求 D 的最小值。
//        答案：5482660

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

//https://pe.metaquant.org/pe044.html
//佬的证明，本人不会
//copy   https://blog.csdn.net/weixin_54040976/article/details/123258381

public class Week044 {
    static void run() {
        HashSet<Integer> div = new HashSet<>();
        List<Integer> result = new ArrayList<>();
        int t1, t2, t3;
        for (int i = 1; ; i++) {
            t1 = i * (3 * i - 1) / 2;
            div.add(t1);
            result.add(t1);
//              System.out.println(t1);
            for (int j = 1; j < i; j++) {
                t2 = result.get(j - 1);
                if (div.contains(t1 - t2)) {
                    t3 = 1 + 24 * (t1 + t2);
                    int a = (int) Math.sqrt(t3);
                    if (a * a == t3 && a % 6 == 5) {
                        System.out.println(t1 - t2);
                        return;
                    }
                }
            }
        }
    }

    public static void main(String[] args) {
        long startTime = System.nanoTime();
        run();
        System.out.println("\n程序运行时间：" + (System.nanoTime() - startTime) + "ns.");
    }
}
